package managers;

import java.sql.SQLException;
import java.util.Calendar;
import java.util.LinkedList;
import java.util.List;

import stores.EszkozStore;
import stores.EszkozStoreImpl;
import stores.FoglalasStore;
import stores.FoglalasStoreImpl;
import stores.FoglaloStore;
import stores.FoglaloStoreImpl;
import stores.TeremStore;
import stores.TeremStoreImpl;
import stores.TipusStore;
import stores.TipusStoreImpl;
import workspace.Workspace;
import beans.Foglalas;

public class FoglalasManagerImpl implements FoglalasManager {

	FoglalasStore foglalasStore = new FoglalasStoreImpl();
	EszkozStore eszkozStore = new EszkozStoreImpl();
	FoglaloStore foglaloStore = new FoglaloStoreImpl();
	TeremStore teremStore = new TeremStoreImpl();
	TipusStore tipusStore = new TipusStoreImpl();

	@Override
	public List<Foglalas> loadFoglalasFromDate(Workspace workspace,
			Calendar fromDate) throws SQLException {
		List<Foglalas> foglalasok = new LinkedList<Foglalas>();
		foglalasok = foglalasStore.loadFoglalasFromDate(workspace, fromDate);
		for (Foglalas foglalas : foglalasok) {
			foglalas.setTerem(teremStore.loadTeremById(workspace,
					foglalas.getTeremId()));
			foglalas.setTipus(tipusStore.loadTipusById(workspace,
					foglalas.getTipusId()));
			foglalas.setFoglalo(foglaloStore.loadFoglaloById(workspace,
					foglalas.getFoglaloId()));
			foglalas.setEszkozok(eszkozStore.loadEszkozFoglalas(workspace,
					foglalas.getId()));
		}
		return foglalasok;

	}

	@Override
	public Foglalas loadFoglalasById(Workspace workspace, long foglalasId)
			throws SQLException {
		Foglalas foglalas = foglalasStore.loadFoglalasById(workspace,
				foglalasId);
		foglalas.setTerem(teremStore.loadTeremById(workspace,
				foglalas.getTeremId()));
		foglalas.setTipus(tipusStore.loadTipusById(workspace,
				foglalas.getTipusId()));
		foglalas.setFoglalo(foglaloStore.loadFoglaloById(workspace,
				foglalas.getFoglaloId()));
		foglalas.setEszkozok(eszkozStore.loadEszkozFoglalas(workspace,
				foglalas.getId()));
		return foglalas;
	}

	@Override
	public Foglalas insertFoglalas(Workspace workspace, Foglalas foglalas)
			throws SQLException {
		workspace.startSession();
		foglalas = foglalasStore.insertFoglalas(workspace, foglalas);
		eszkozStore.insertEszkozFoglalas(workspace, foglalas.getEszkozok(),
				foglalas.getId());
		workspace.commit();
		return foglalas;
	}

	@Override
	public Foglalas updateFoglalas(Workspace workspace, Foglalas updatedFoglalas)
			throws SQLException {
		workspace.startSession();
		if (updatedFoglalas.getDeletedEszkoz() != null) {
			eszkozStore
					.deleteEszkozFoglalas(workspace,
							updatedFoglalas.getDeletedEszkoz(),
							updatedFoglalas.getId());
		}
		if (updatedFoglalas.getNewEszkoz() != null) {
			eszkozStore.insertEszkozFoglalas(workspace,
					updatedFoglalas.getNewEszkoz(), updatedFoglalas.getId());
		}
		boolean update = foglalasStore.updateFoglalas(workspace,
				updatedFoglalas);
		workspace.commit();
		if (update) {
			return this.loadFoglalasById(workspace, updatedFoglalas.getId());
		} else {
			return null;
		}
	}

	@Override
	public boolean deleteFoglalas(Workspace workspace, Foglalas deletedFoglalas)
			throws SQLException {
		boolean isSuccess = true;
		workspace.startSession();
		isSuccess = isSuccess
				&& eszkozStore.deleteEszkozFoglalas(workspace,
						deletedFoglalas.getEszkozok(), deletedFoglalas.getId());
		isSuccess = isSuccess
				&& foglalasStore.deleteFoglalas(workspace,
						deletedFoglalas.getId());
		workspace.commit();
		return isSuccess;
	}

}
